package negocio;

import java.math.BigDecimal;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;

import util.HibernateUtil;

import dominio.Conta;

public class ContaService {
	public void salvar(Conta conta) throws RegraNegocioException {
		if (conta.getValor().compareTo(BigDecimal.ZERO) <= 0) {
			throw new RegraNegocioException(
				"Valor da conta deve ser maior que zero.");
		}
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		session.saveOrUpdate(conta);
		tx.commit();
		session.close();

	}
	
	public Conta pesquisarPorId(Long id) {
		Session session = HibernateUtil.getSession();
		try {
			return (Conta) session.get(Conta.class, id);
		} finally {
			session.close();
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Conta> listarTodas() {
		Session session = HibernateUtil.getSession();
	try {
		return session.createCriteria(Conta.class)
			.addOrder(Order.desc("dataVencimento")).list();
	} finally {
		session.close();
	}
	}
	
	public void excluir(Conta conta) throws RegraNegocioException {
		if (conta.getDataBaixa() != null) {
			throw new RegraNegocioException(
					"Esta conta não pode ser excluída, pois já foi "
						+ "baixada!");
		}
		
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		session.delete(conta);
		tx.commit();
		session.close();
		}
	
	



	
}
